package fms.thread;

import fms.controller.Grib2BySkyviewParseCon;
import org.apache.log4j.Logger;

import java.io.File;

/**
 * 解析/保存从SKYVIEW项目中获取到的数据信息线程
 */
public class Grid2BySkyviewDataThread implements Runnable {
    private static Logger logger = Logger.getLogger(Grid2BySkyviewDataThread.class);


    private String grib2BySkyviewDirPath;
    private String backupPath;
    private String backupGrib2SuccessDir;

    public Grid2BySkyviewDataThread(String grib2BySkyviewDirPath, String backupPath, String backupGrib2SuccessDir) {
        this.grib2BySkyviewDirPath = grib2BySkyviewDirPath;
        this.backupPath = backupPath;
        this.backupGrib2SuccessDir = backupGrib2SuccessDir;
    }

    @Override
    public void run() {
        dealGrib2BySkyviewData(grib2BySkyviewDirPath, backupPath, backupGrib2SuccessDir);
    }

    /**
     * <p>
     * 解析由SKYVIEW项目中使用的grid2数据，从原scanDirPath中扫描文件解析，
     * 成功解析的入数据库中，解析不成功的进入备份文件目录。
     *
     * 由于SKYVIEW项目中使用的Grib2数据，是已经经过特殊处理后的，
     * 每一份原始的Grib2数据文件将以下面的结果存储
     *      ../风温数据目录/以若干标准高度层为名的目录列表/以Grib2数据日期及时长为名的文件
     *      ../风uv分量数据目录/以若干标准高度层为名的目录列表/以Grib2数据日期及时长为名的文件
     * 每一份uv文件信息量为风温文件的二倍
     *
     * 综上，该数据的解析思路与之前的JETPLAN和原始Grib2数据不同；
     *       将下面四个参数传入 controller 中，1次线程扫描1次1全路径，将现有的所有数据文件依次解析入库，无论其是否配对
     * </p>
     *
     * @param grib2BySkyviewDirPath : 获取Grib2风信息源数据目录
     * @param backupDirPath : 解析失败文件的备份目录
     * @param backupGrib2SuccessDir : 解析成功文件的备份目录
     */
    private static void dealGrib2BySkyviewData(String grib2BySkyviewDirPath,
                                               String backupDirPath, String backupGrib2SuccessDir) {
        // 判断指定目录中是否存在文件
        File fGrib2BySkyviewSacnDir = new File(grib2BySkyviewDirPath);
        if ( (null == fGrib2BySkyviewSacnDir) || !fGrib2BySkyviewSacnDir.isDirectory()
                || (null == fGrib2BySkyviewSacnDir) || !fGrib2BySkyviewSacnDir.isDirectory()) {
            logger.error("无法打开指定数据源(风温or风UV分量)目录！");
            return;
        }

        Grib2BySkyviewParseCon planParseControl = new Grib2BySkyviewParseCon(grib2BySkyviewDirPath,backupDirPath,backupGrib2SuccessDir);
//        System.out.println("11111111111111");
        // grib2数据较大，边解析边多线程入库，航班飞行计划是先解析数据再入库
        boolean parseStatus = planParseControl.parseDataSource();
//        if (parseStatus) {
//            logger.info("Grib2数据" + childFile.getName() + "解析、入库完毕");
//            //System.gc();
//            //配置是否备份解析成功的文件
//            String isBackupSuccess = ConfUtil.props.getProperty("isBackupSuccess");
//            if ("true".equalsIgnoreCase(isBackupSuccess)) {
//                if (!FileUtil.MoveFile(childFile, backupGrib2SuccessDir)) {
//                    // 如果文件移动失败（eg：文件名重复，则直接删除）
//                    if (!childFile.delete()) {
//                        logger.error(childFile.getAbsolutePath() + "解析成功的Grib2文件删除失败，本服务停止");
//                        return;
//                    } else {
//                        logger.error("本次Grib2数据文件解析成功，文件" + fileNameList[i] + "无法移动，已删除");
//                    }
//                } else {
//                    logger.error("本次Grib2数据文件解析成功，文件" + fileNameList[i] + "已被剪切至:" + backupGrib2SuccessDir);
//                }
//            } else {
//                if (!childFile.delete()) {
//                    logger.error(childFile.getAbsolutePath() + "文件删除失败，本服务停止");
//                    return;
//                }
//            }
//            logger.info("Grib2数据" + childFile.getName() + "入库结束，文件已删除");
//        } else {
//            // 如果文件移动失败（eg：文件名重复，则直接删除）
//            if (!FileUtil.MoveFile(childFile, backupDirPath)) {
//                if (!childFile.delete()) {
//                    logger.error(childFile.getAbsolutePath() + "无法解析的Grib2文件删除失败，本服务停止");
//                    return;
//                } else {
//                    logger.error("本次Grib2数据文件无法解析，文件" + fileNameList[i] + "无法移动，已删除");
//                }
//            } else {
//                logger.error("本次Grib2数据文件无法解析，文件" + fileNameList[i] + "已被剪切至:" + backupDirPath);
//            }
//        }
    }


}
